package controllers

import (
	"log"
	"my-yipuku/models"
	"my-yipuku/utils"
	"os"
	"strconv"

	"github.com/gin-gonic/gin"
)

type Coupon struct{}

// 查询优惠券列表
func (u Coupon) List(c *gin.Context) {
	list := models.CouponPackage{}.List()
	type ReturnCoupon struct {
		Id     int     `json:"id"`
		Count  int     `json:"count"`
		Price  float64 `json:"price"`
		Prompt string  `json:"prompt"`
	}
	res := make(map[int]ReturnCoupon)
	for k, v := range list {
		res[k] = ReturnCoupon{
			Id:     v.ID,     // id
			Count:  v.Count,  // 数量
			Price:  v.Price,  // 价格
			Prompt: v.Prompt, // 提示语
		}
	}
	ReturnSuccess(c, 200, "请求成功", res)
}

// 购买优惠卷
func (u Coupon) Buy(c *gin.Context) {
	// 获取请求信息
	postId := c.PostForm("id")
	log.Println(postId)
	if postId == "" {
		ReturnError(c, 400, "缺少参数ID")
		return
	}
	id, _ := strconv.Atoi(postId)
	// 查询优惠卷数据
	couponPackage := models.CouponPackage{}.One(id)
	title := "购买优惠卷"
	// 获取用户信息
	user, _ := c.Get("user")
	userId := user.(*utils.MyClaim).ID
	// 关于1和2的值说明，1是指直接通过页面购买的，2是指这个订单是属于优惠卷的订单
	// 生成用户订单
	userOrderId := models.UserOrder{}.CreatedOrder(userId, couponPackage.Price, 1, 2, title, "")
	// 生成优惠卷订单
	couponOrderId := models.CouponOrder{}.CreatedOrder(userOrderId, couponPackage.Count, couponPackage.Price)
	// 发起支付
	res := u.pay(couponOrderId, couponPackage.Price)
	ReturnSuccess(c, 200, "请求成功", res)
}

func (c Coupon) pay(OrderId string, money float64) interface{} {
	domain, err := os.Hostname() // 获取域名
	if err != nil {
		panic(err)
	}
	title := "购买优惠卷"
	notifyUrl := domain + "" // 异步回调地址
	returnUrl := domain + "" // 同步回调地址
	log.Println(OrderId, money, title, 1, notifyUrl, returnUrl)
	res := utils.Yungouos{}.NativePay(OrderId, money, title, 1, notifyUrl, returnUrl)
	log.Println(res)
	return res
}
